package com.xgj.dto;

/**
 * 基础响应对象
 * 所有接口响应应统一继承此格式，保证前后端交互规范。
 *
 * @param <T> 实际业务数据类型
 */
public class BaseResponse<T> {

    private int code;          // 状态码（HTTP 语义，如 200 成功，400 参数错误）
    private String message;    // 用户友好提示消息（如“操作成功”）
    private String traceId;    // 链路追踪 ID（用于日志关联，排查问题）
    private T data;            // 业务数据（如导入结果、查询结果）

    // ------------------------- 成功响应 -------------------------
    public static <T> BaseResponse<T> success(T data) {
        return new BaseResponse<>(200, "操作成功", generateTraceId(), data);
    }

    // ------------------------- 失败响应 -------------------------
    public static <T> BaseResponse<T> fail(int code, String message) {
        return new BaseResponse<>(code, message, generateTraceId(), null);
    }

    // ------------------------- 构造方法 -------------------------
    private BaseResponse(int code, String message, String traceId, T data) {
        this.code = code;
        this.message = message;
        this.traceId = traceId;
        this.data = data;
    }

    // ------------------------- 辅助方法 -------------------------
    private static String generateTraceId() {
        // 实际项目中，可以从 MDC（日志上下文）或请求头中获取 traceId
        return "TRACE-" + System.currentTimeMillis(); // 示例代码
    }

    // ------------------------- Getter/Setter -------------------------
    public int getCode() { return code; }
    public void setCode(int code) { this.code = code; }
    public String getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }
    public String getTraceId() { return traceId; }
    public void setTraceId(String traceId) { this.traceId = traceId; }
    public T getData() { return data; }
    public void setData(T data) { this.data = data; }

}
